package Chain_of_Responsibility_Pattern;

/**
 * 抽象执行者
 */
public abstract class abstractHandler {
    public final static int NUM_ONE = 1;
    public final static int NUM_THREE = 3;
    public final static int NUM_SEVEN = 7;

    // 此领导能处理的请假日期区间 如部门经理只能批 1月1号到1月2号共1天的假期
    private int numStart;
    private int numEnd;

    // 声明后续执行者
    private abstractHandler nextHandler;

    public abstractHandler(int numStart, int numEnd) {
        this.numStart = numStart;
        this.numEnd = numEnd;
    }

    // 设置后续执行者
    public void setNextHandler(abstractHandler handler ){
        this.nextHandler = handler;
    }

    // 定义每个执行者的处理请求方法
    protected abstract void handLeaveResponse(LeaveResponse leaveResponse);

    // 将请求提交给执行者 不允许子类进行重写
    public final void submit(LeaveResponse leaveResponse){
        this.handLeaveResponse(leaveResponse);
        // 判断, 将请求提交给后续执行者
        if (this.nextHandler != null && leaveResponse.getNum() > this.numEnd){
            this.nextHandler.handLeaveResponse(leaveResponse);
        }
        else{
            System.out.println("处理完成");
        }
    }
}
